/**
 * 单个的省份信息的接口
 */
export interface DictItem {
  /**
   * ID
   */
  id: number;
  /**
   * 创建时间
   */
  createTime: string;
  /**
   * 更新时间
   */
  updateTime: string;
  /**
   * 是否删除
   */
  isDeleted: number;
  /**
   * 参数
   */
  param: object;
  /**
   * 父级 id
   */
  parentId: number;
  /**
   * 省份的名字
   */
  name: string;
  /**
   * 省份的值
   */
  value: string;
  /**
   * 编号
   */
  dictCode?: any;
  /**
   * 是否有子节点
   */
  hasChildren: boolean;
}

/**
 * 多个省份信息的接口
 */
export type DictItems = DictItem[];

/**
 * 搜索医院数据的表单值的结构
 */
export interface HospitalSearchForm {
  hoscode?: string;
  hosname?: string;
  hostype?: string;
  provinceCode?: string;
  cityCode?: string;
  districtCode?: string;
  status?: number;
}

/**
 * 获取医院列表的参数结构
 */
export interface HospitalListParams extends HospitalSearchForm {
  page: number;
  limit: number;
}

/**
 * 获取医院列表响应结果的类型
 */
export interface HospitalListResponse {
  /**
   * 医院列表的数据
   */
  content: HospitalListItem[];
  /**
   * 分页相关
   */
  pageable: Pageable;
  /**
   * 总的页码数
   */
  totalPages: number;
  /**
   * 总的医院数量
   */
  totalElements: number;
  /**
   * 是否为最后
   */
  last: boolean;
  /**
   * 是否为第一个
   */
  first: boolean;
  /**
   * 排序相关
   */
  sort: Sort;
  /**
   * 未知
   */
  numberOfElements: number;
  /**
   * 本次响应数据的数量
   */
  size: number;
  /**
   * 未知
   */
  number: number;
  /**
   * 是否为空
   */
  empty: boolean;
}

/**
 * 分页的结构
 */
interface Pageable {
  sort: Sort;
  pageNumber: number;
  pageSize: number;
  offset: number;
  paged: boolean;
  unpaged: boolean;
}

/**
 * 排序的结构
 */
interface Sort {
  sorted: boolean;
  unsorted: boolean;
  empty: boolean;
}

/**
 * 医院的公共基础信息
 */
interface HospitalBaseInfo {
  /**
   * ID
   */
  id: string;
  /**
   * 创建时间
   */
  createTime: string;
  /**
   * 更新时间
   */
  updateTime: string;
  /**
   * 是否删除
   */
  isDeleted: number;
  /**
   * 医院的其他信息 地址和类型
   */
  param: HosOtherInfo;
  /**
   * 医院编号
   */
  hoscode: string;
  /**
   * 医院名称
   */
  hosname: string;
  /**
   * 医院类型
   */
  hostype: string;
  /**
   * 省份编号
   */
  provinceCode: string;
  /**
   * 城市编号
   */
  cityCode: string;
  /**
   * 区域编号
   */
  districtCode: string;
  /**
   * 医院地址
   */
  address: string;
  /**
   * logo 图片
   */
  logoData: string;
  /**
   * 医院介绍
   */
  intro: string;
  /**
   * 乘车路线
   */
  route: string;
  /**
   * 状态 0 未上线 1 表示已上线
   */
  status: number;
}

//定义单条数据的接口
export interface HospitalListItem extends HospitalBaseInfo {
  /**
   * 预约规则
   */
  bookingRule: BookingRule;
}

export type HospitalListItems = HospitalListItem[];

/**
 * 预约规则的单独接口
 */
interface BookingRule {
  /**
   * 预约周期
   */
  cycle: number;
  /**
   * 放号事件
   */
  releaseTime: string;
  /**
   * 停挂时间
   */
  stopTime: string;
  /**
   * 退号日期
   */
  quitDay: number;
  /**
   * 退号时间
   */
  quitTime: string;
  //详细的规则说明
  rule: string[];
}
/**
 * 其他信息
 */
interface HosOtherInfo {
  /**
   * 医院类型的中文表示
   */
  hostypeString: string;
  /**
   * 完整的地址
   */
  fullAddress: string;
}

/**
 * 医院详细信息的响应数据结构
 */
export interface HospitalShowResponse {
  bookingRule: BookingRule;
  hospital: Hospital;
}

interface Hospital extends HospitalBaseInfo {
  bookingRule: null;
}

// 单个部门的类型
export interface Department {
  depcode: string;
  depname: string;
  children: DepartmentList | null;
}

// 多个部门的类型
export type DepartmentList = Department[];

// 单个排班规则
export interface ScheduleRule {
  workDate: string;
  dayOfWeek: string;
  reservedNumber: number;
  availableNumber: number;
}
// 排班规则列表
export type ScheduleRuleList = ScheduleRule[];

// 获取排班规则列表的响应数据类型
export interface GetScheduleRuleListReponse {
  total: number;
  bookingScheduleList: ScheduleRuleList;
  baseMap: {
    hosname: string;
  };
}

// 获取排班规则列表的请求参数的数据类型
export interface GetScheduleRuleListParams {
  page: number;
  limit: number;
  hoscode: string;
  depcode: string;
}

// 单个排班的类型
export interface Schedule {
  id: string;
  title: string; // 职称
  docname: string; // 姓名
  workDate: string; // 号源时间
  reservedNumber: number; // 总预约数
  availableNumber: number; // 剩余数
  amount: number; // 价格
  skill: string;  // 技能
}
// 排班的列表
export type ScheduleList = Schedule[]

// 获取排班列表的参数的类型
export interface GetScheduleListParams {
  hoscode: string;
  depcode: string;
  workDate: string;
}

